"""
1. 使用步骤：
# 1. 导包 from parameterized import parameterized
#   安装parameterized： pip install parameterized
# 2. 在测试方法上方添加装饰器并都调用方法
@parameterized.expand([(数据1， 数据2, ……), (数据a， 数据b, ……), ……])
def 测试方法(self, 形参1， 形参2, ……)
    pass

2. 注意: 参数化完成后, 需要在测试类后侧执行测试, 测试方法后侧运行报错
3. 参数化形式三: 先定义构造数据的函数或方法, 再传入函数或方法名即可(重点: 最常用)
"""

import unittest
# 1. 导包 from parameterized import parameterized
#   安装parameterized： pip install parameterized
from parameterized import parameterized


def add(a, b):
    return a + b


# 类的外面定义一个函数，用于构造数据
def build_data():
    # 1. 读取文件内容
    # 2. 将读到的内容转换为[(), (), ()] 这种格式
    # 3. 返回数据
    return [(1, 1, 3), (2, 2, 4), (2, 3, 8), (3, 3, 6), (3, 3, 6)]


class TestAdd(unittest.TestCase):
    # 先调用build_data()， 将函数的返回值作为参数传递
    # 如果build_data不需要传递 参数，直接传入函数名即可
    @parameterized.expand( build_data() )
    # @parameterized.expand( build_data )
    def test_add(self, x, y, expect):
        print(f'x = {x}, y = {y}, expect = {expect}')
        # x, y 传入函数的参数，expect预期结果
        result = add(x, y)
        print('result = ', result)
        # 断言
        self.assertEqual(expect, result)
